<?php

/*
 * This file is part of SwiftMailer. (c) 2004-2009 Chris Corbyn For the full copyright and license information, please view the LICENSE file that was distributed with this source code.
 */

/**
 * General utility class in Swift Mailer, not to be instantiated.
 *
 * @package Swift
 *         
 * @author Chris Corbyn
 */
abstract class Swift {
	public static $initialized = false;
	public static $inits = array ();
	
	/**
	 * Swift Mailer Version number generated during dist release process
	 */
	const VERSION = '4.2.1';
	
	/**
	 * Registers an initializer callable that will be called the first time
	 * a SwiftMailer class is autoloaded.
	 *
	 * This enables you to tweak the default configuration in a lazy way.
	 *
	 * @param mixed $callable
	 *        	A valid PHP callable that will be called when autoloading the first Swift class
	 */
	public static function init($callable) {
		self::$inits [] = $callable;
	}
	
	/**
	 * Internal autoloader for spl_autoload_register().
	 *
	 * @param string $class        	
	 */
	public static function autoload($class) {
		// Don't interfere with other autoloaders
		if (0 !== strpos ( $class, 'Swift_' )) {
			return;
		}
		
		$path = dirname ( __FILE__ ) . '/' . str_replace ( '_', '/', $class ) . '.php';
		
		if (! file_exists ( $path )) {
			return;
		}
		
		require $path;
		
		if (self::$inits && ! self::$initialized) {
			self::$initialized = true;
			foreach ( self::$inits as $init ) {
				call_user_func ( $init );
			}
		}
	}
	
	/**
	 * Configure autoloading using Swift Mailer.
	 *
	 * This is designed to play nicely with other autoloaders.
	 *
	 * @param mixed $callable
	 *        	A valid PHP callable that will be called when autoloading the first Swift class
	 */
	public static function registerAutoload($callable = null) {
		if (null !== $callable) {
			self::$inits [] = $callable;
		}
		spl_autoload_register ( array (
				'Swift',
				'autoload' 
		) );
	}
}
